package interfaz;

import java.sql.SQLException;
import java.text.ParseException;
import java.util.Vector;

import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;

import modelo.CentroEstudios;
import modelo.Equipo;
import modelo.Hardware;
import modelo.Software;

import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyVetoException;
import javax.swing.JFormattedTextField;

public class VAnadirEquipos extends JInternalFrame {
	private JTextField txtcodEquipo;
	private DefaultTableModel modelo;
	private CentroEstudios centroEstudios;
	private Vector<Hardware> vHardEquipo = new Vector<Hardware>();
	private Vector<Software> vSoftEquipo = new Vector<Software>();
	private JComboBox cmbAula;
	private JButton btnModificar;
	private JButton btnAceptar;
	private JTabbedPane tabbedPane;
	private JList lstHard;
	private JList lstHardEq;
	private JList lstSoft;
	private JList lstSoftEq;
	private JTable tabla;
	private boolean modificar = false; //true si es una modificación
	private JTextField txtIP;

	public VAnadirEquipos(CentroEstudios centroEstudios) {
		
		this.centroEstudios = centroEstudios;
		
		setTitle("Nuevo equipo");
		setClosable(true);
		setMaximizable(true);
		setBounds(0, 0, 894, 600);
		getContentPane().setLayout(null);
		
		JLabel lblCdigoEquipo = new JLabel("Código equipo:");
		lblCdigoEquipo.setBounds(314, 14, 107, 15);
		getContentPane().add(lblCdigoEquipo);
		
		JLabel lblAula = new JLabel("Aula:");
		lblAula.setBounds(314, 46, 70, 15);
		getContentPane().add(lblAula);
		
		txtcodEquipo = new JTextField();
		txtcodEquipo.setBounds(439, 12, 114, 19);
		txtcodEquipo.setEditable(false);
		getContentPane().add(txtcodEquipo);
		txtcodEquipo.setColumns(10);
		
		cmbAula = new JComboBox(VAnadirEquipos.this.centroEstudios.vAulas);
		cmbAula.setBounds(439, 41, 174, 24);
		getContentPane().add(cmbAula);
		
		tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.setBounds(70, 162, 733, 271);
		getContentPane().add(tabbedPane);
		
		JPanel pnAnaHard = new JPanel();
		tabbedPane.addTab("Añadir hardware", pnAnaHard);
		pnAnaHard.setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(40, 50, 250, 165);
		pnAnaHard.add(scrollPane);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(435, 50, 250, 165);
		pnAnaHard.add(scrollPane_1);
		
		lstHard = new JList(VAnadirEquipos.this.centroEstudios.vHardwares);
		scrollPane.setViewportView(lstHard);
		
		lstHardEq = new JList();
		scrollPane_1.setViewportView(lstHardEq);
		
		JLabel lblHardware = new JLabel("Hardware");
		lblHardware.setBounds(117, 23, 94, 15);
		pnAnaHard.add(lblHardware);
		
		JLabel lblEquipo = new JLabel("Equipo");
		lblEquipo.setBounds(530, 23, 70, 15);
		pnAnaHard.add(lblEquipo);
		
		JButton button = new JButton(">>");
		button.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if(lstHard.getSelectedIndex()!=-1){
					int indice = lstHard.getSelectedIndex();
					vHardEquipo.addElement(VAnadirEquipos.this.centroEstudios.vHardwares.elementAt(indice));
					lstHardEq.setListData(vHardEquipo);
				}else{
					JOptionPane.showMessageDialog(VAnadirEquipos.this, "Seleccione un hardware para poder añadirlo al equipo.", "Equipos.", JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		button.setBounds(335, 67, 54, 49);
		pnAnaHard.add(button);
		
		JButton button_1 = new JButton("<<");
		button_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				try{
					int indice = lstHardEq.getSelectedIndex();
					vHardEquipo.remove(indice);
					lstHardEq.setListData(vHardEquipo);
				}catch (Exception e1) {
					e1.printStackTrace();
					JOptionPane.showMessageDialog(VAnadirEquipos.this, "Seleccione un hardware para poder quitarselo al equipo.", "Equipos.", JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		button_1.setBounds(335, 140, 54, 49);
		pnAnaHard.add(button_1);
		
		JPanel pnAnaSof = new JPanel();
		tabbedPane.addTab("Añadir software", pnAnaSof);
		pnAnaSof.setLayout(null);
		
		JScrollPane scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(40, 50, 250, 165);
		pnAnaSof.add(scrollPane_2);
		
		lstSoft = new JList(VAnadirEquipos.this.centroEstudios.vSoftwares);
		scrollPane_2.setViewportView(lstSoft);
		
		JScrollPane scrollPane_3 = new JScrollPane();
		scrollPane_3.setBounds(435, 50, 250, 165);
		pnAnaSof.add(scrollPane_3);
		
		lstSoftEq = new JList();
		scrollPane_3.setViewportView(lstSoftEq);
		
		JButton btnNewButton = new JButton(">>");
		btnNewButton.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				try{
					int indice = lstSoft.getSelectedIndex();
					vSoftEquipo.addElement(VAnadirEquipos.this.centroEstudios.vSoftwares.elementAt(indice));
					lstSoftEq.setListData(vSoftEquipo);
				}catch (Exception e2) {
					e2.printStackTrace();
					JOptionPane.showMessageDialog(VAnadirEquipos.this, "Elija un software para añadir.", "Equipos.", JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		btnNewButton.setBounds(335, 67, 54, 49);
		pnAnaSof.add(btnNewButton);
		
		JButton btnNewButton_1 = new JButton("<<");
		btnNewButton_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				try{
					int indice = lstSoftEq.getSelectedIndex();
					vSoftEquipo.remove(indice);
					lstSoftEq.setListData(vSoftEquipo);
				}catch (Exception e3) {
					//e3.printStackTrace();
					JOptionPane.showMessageDialog(VAnadirEquipos.this, "Elije un software para quitar del equipo.", "Equipos.", JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		btnNewButton_1.setBounds(335, 140, 54, 49);
		pnAnaSof.add(btnNewButton_1);
		
		JLabel lblSoftware = new JLabel("Software");
		lblSoftware.setBounds(117, 23, 94, 15);
		pnAnaSof.add(lblSoftware);
		
		JLabel lblAula_1 = new JLabel("Aula");
		lblAula_1.setHorizontalAlignment(SwingConstants.CENTER);
		lblAula_1.setBounds(521, 23, 70, 15);
		pnAnaSof.add(lblAula_1);
		
		JPanel pnEquipo = new JPanel();
		tabbedPane.addTab("Equipos", pnEquipo);
		pnEquipo.setLayout(null);
		
		tabla = new JTable();
		JScrollPane scrollPane_4 = new JScrollPane(tabla);
		scrollPane_4.setBounds(50, 29, 627, 151);
		pnEquipo.add(scrollPane_4);
		
		btnModificar = new JButton("Modificar");
		btnModificar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (btnModificar.isEnabled()){
					modificar = true;
					Equipo equipo = VAnadirEquipos.this.centroEstudios.vEquipos.elementAt(tabla.getSelectedRow());
					txtcodEquipo.setText(equipo.getIdEquipo());
					txtIP.setText(equipo.getIp());
					cmbAula.setSelectedIndex(buscarAula(equipo.getCodAula()));
					vSoftEquipo = equipo.getvSoftwares();
					vHardEquipo = equipo.getvHardwares();
					lstHardEq.setListData(vHardEquipo);
					lstSoftEq.setListData(vSoftEquipo);
					System.out.println(tabbedPane.getSelectedIndex());
				}
			}
		});
		btnModificar.setBounds(308, 192, 117, 25);
		pnEquipo.add(btnModificar);
		
		btnAceptar = new JButton("Aceptar");
		btnAceptar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if(btnAceptar.isEnabled()){
					if (vHardEquipo.size()!=0){
						Equipo equipo = new Equipo(txtcodEquipo.getText(),txtIP.getText(), VAnadirEquipos.this.centroEstudios.vAulas.elementAt(cmbAula.getSelectedIndex()).getIdAula(), vHardEquipo, vSoftEquipo);
						try {
							if (modificar){
								VAnadirEquipos.this.centroEstudios.modificarEquipo(equipo);
								modificar = false;
							}else{
								VAnadirEquipos.this.centroEstudios.crearEquipo(equipo);
							}
							JOptionPane.showMessageDialog(VAnadirEquipos.this, "Equipo creado correctamente.", "Equipos.", JOptionPane.INFORMATION_MESSAGE);
							cargarDatos();
							ponerBlancos();
						} catch (SQLException e1) {
							e1.printStackTrace();
							JOptionPane.showMessageDialog(VAnadirEquipos.this, "No se ha podido crear el equipo.", "Equipos.", JOptionPane.ERROR_MESSAGE);
						}
					}else{
						JOptionPane.showMessageDialog(VAnadirEquipos.this, "Añada hardware para crear un equipo.", "Equipos.", JOptionPane.WARNING_MESSAGE);
					}
				}
			}
		});
		btnAceptar.setBounds(385, 110, 117, 25);
		getContentPane().add(btnAceptar);
		
		JLabel lblIp = new JLabel("IP:");
		lblIp.setBounds(314, 81, 70, 15);
		getContentPane().add(lblIp);
		
		txtIP = new JTextField();
		txtIP.setBounds(439, 79, 114, 19);
		getContentPane().add(txtIP);
		txtIP.setColumns(10);
				
		//Desactivar paneles
		if (VMain.establecerPermisos(VAnadirEquipos.this.centroEstudios.usuario)==2){
			tabbedPane.setEnabledAt(0, false);
			tabbedPane.setEnabledAt(1, false);
			txtcodEquipo.setEnabled(false);
			cmbAula.setEnabled(false);
			btnModificar.setEnabled(false);
			btnAceptar.setEnabled(false);
			tabbedPane.setSelectedIndex(2);
		}
	}
	
	private void ponerBlancos(){
		txtcodEquipo.setText("");
		cmbAula.setSelectedIndex(0);
		lstHard.setListData(VAnadirEquipos.this.centroEstudios.vHardwares);
		vHardEquipo.clear();
		lstHardEq.setListData(vHardEquipo);
		vSoftEquipo.clear();
		lstSoftEq.setListData(vSoftEquipo);
	}
	
	public void cargarDatos(){
		modelo = new DefaultTableModel();
		modelo.addColumn("idEquipo");
		modelo.addColumn("idAula");
		for (int i=0;i<VAnadirEquipos.this.centroEstudios.vEquipos.size();i++){
			Object[] linea = new Object[2];
			linea[0] = VAnadirEquipos.this.centroEstudios.vEquipos.elementAt(i).getIdEquipo();
			linea[1] = VAnadirEquipos.this.centroEstudios.vEquipos.elementAt(i).getCodAula();
			modelo.addRow(linea);
		}
		tabla.setModel(modelo);
	}
	
	public void setVisible(boolean b){
		super.setVisible(b);
		if (b){
			cargarDatos();
			generarCodigo();
		}
	}
	
	public int buscarAula(String idAula){
		for (int i=0;i<VAnadirEquipos.this.centroEstudios.vAulas.size();i++){
			if(VAnadirEquipos.this.centroEstudios.vAulas.elementAt(i).getIdAula().equals(idAula)){
				return i;
			}
		}
		return -1;
	}
	
	private void generarCodigo() {
		int codigo = 0;
		try {
			codigo = centroEstudios.generarCodigo("EQUIPOS");
			txtcodEquipo.setText(Integer.toString(codigo));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
